package judge.happy.number;
/**
 * @Time 2019/12/15
 * @author 王光浩
 * @Need 判断一个数是否是happy数（规则为：对于一个正整数，每一次将该数替换为它每个位置上的数字的平方和，
 *       然后重复这个过程直到这个数变为 1，也可能是无限循环但始终变不到 1。如果可以变为 1，那么这个数就是快乐数。
 * @Method 使用递归进行判断（对于这种找不到边的题目，首先多写几个例子，看看能不找出其中的规律）。该题中所有的不快乐数最后都出现
 *         4-16-37-58-89-145-42-20，然后一直循环，所以如果我们使用递归的结束条件就是n为其中的任何一个值时，返回false。两个方法都
 *         使用了尾调用，前面的使用了尾调用、后面的使用了尾递归（尾调用的一种）。
 */
public class MyMethodTwo {
    public boolean isHappy(int n) {
    	return this.recursion(n);
    }
    private boolean recursion(int n) {
    	if(n==1)
    		return true;
    	if(n==4)
    		return false;
    	else {
    		String tem=String.valueOf(n);
    		n=0;
    		int len=tem.length();
    		for(int i=0;i<len;i++) {
    			n+=Math.pow((int)tem.charAt(i)-48, 2);
    		}
    	}
    	return recursion(n);
    }
}
